/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.dao;

import br.com.deployment.daogenerico.DaoGenerico;
import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.tramite.Secao;
import br.com.deployment.interfaces.UsuarioDaoIn;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.NoResultException;
import javax.persistence.Query;

/**
 *
 * @author elyjr
 */
@Stateless
@LocalBean
public class UsuarioDao extends DaoGenerico<Usuario> implements UsuarioDaoIn{
    
    public UsuarioDao(){
        super(Usuario.class);
    }
    
     public List<Usuario> findUsuario(Usuario usuario) {
        List<Usuario> listuser = new ArrayList<Usuario>();
        if (usuario != null) {
            String sql = "select u from Usuario u";

            if (usuario.getNome() != null && usuario.getNome().length() > 0) {
                sql += " where  u.nome like ?1 ";
            }
    
            Query query = getEm().createQuery(sql);
            if (usuario.getNome() != null && usuario.getNome().length() > 0) {
                query.setParameter("1", "%" + usuario.getNome() + "%");
            }
             
            listuser = query.getResultList();
            return listuser;
        }
        return null;
    }

    
    public Boolean exist(Usuario usuario) {
         if (getEm().contains(usuario)) {
            return true;
        } else {
            return false;
        }
    }

    
    public List<Usuario> verificaUsuario(Usuario usuario) {
       List<Usuario> listusuario = new ArrayList<Usuario>();
        if (usuario != null) {
            String sql = "select u from Usuario u where ";

            if (usuario.getNome() != null && usuario.getNome().length() > 0) {
                sql += " u.nome like ?1 ";
            }

            
            Query query = getEm().createQuery(sql);
            if (usuario.getNome() != null && usuario.getNome().length() > 0) {
                query.setParameter("1",  usuario.getNome());
            }
            listusuario = query.getResultList();
            return listusuario;
        }
        return null;
    }

    
    public Usuario verificarUsuarioNome(String nome) {
        Usuario usr = null;
        try{
            Query query = getEm().createQuery("select u from Usuario u where u.login like :nome and u.status = true");
            query.setParameter("nome", nome); 
            usr = (Usuario) query.getSingleResult();
            
        }catch(NoResultException e){
            System.err.println("Nenhum usuário encontrado");
            return null;
        }
        return usr;
     }
    
    public List<Usuario> findUsuarioBySecao(Secao secao){
        Query query = getEm().createQuery("select u from Usuario u JOIN u.secao s where s.nome like :nome");
        query.setParameter("nome", secao.getNome()); 
        return query.getResultList();
    }

    public List<Secao> findSecaoUsuario(Usuario usuario){
        Query query = getEm().createQuery("select s from Usuario u JOIN u.secao s"
                + " where u.id = :id");
        query.setParameter("id", usuario.getId()); 
        return query.getResultList();
    }
    
}
